package com.lm.mongo.service;

import com.lm.mongo.entry.User;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class UserService {
    private static final String COLLECTION_NAME = "user";
    private final MongoTemplate mongoTemplate;
    public UserService(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public List<User> search(String name, Integer minAge, String city) {
        Query query = new Query();
        if (name != null) {
            query.addCriteria(Criteria.where("name").regex(name, "i"));
        }
        if (minAge != null) {
            query.addCriteria(Criteria.where("age").gte(minAge));
        }
        if (city != null) {
            query.addCriteria(Criteria.where("city").is(city));
        }
        return mongoTemplate.find(query, User.class);
    }

    public Object save() {
        // 设置用户信息
        User user = new User();
        user.setId("13");
        user.setAge(22);
        user.setSex("男");
        user.setSalary(2800);
        user.setName("lsk");
        // 存储用户信息,如果文档信息已经存在就执行更新
        User newUser = mongoTemplate.save(user, COLLECTION_NAME);
        // 输出存储结果
        System.out.println("存储的用户信息为：" + newUser);
        return newUser;
    }

    /**
     * 根据【条件】查询集合中【符合条件】的文档，只取【第一条】数据
     *
     * @return 符合条件的第一条文档
     */
    public Object findOne() {
        // 设置查询条件参数
        int age = 22;
        // 创建条件对象
        Criteria criteria = Criteria.where("age").is(age);
        // 创建查询对象，然后将条件对象添加到其中
        Query query = new Query(criteria);
        // 查询一条文档，如果查询结果中有多条文档，那么就取第一条
        User user = mongoTemplate.findOne(query, User.class, COLLECTION_NAME);
        // 输出结果
        System.out.println("用户信息："  + user);
        return user;
    }
}
